<?php
/**
 * @version		1.0: classzamowienie.php marum56
 * @package		Joomla
 */

// Check to ensure this file is within the rest of the framework
defined('JPATH_BASE') or die();

jimport( 'joomla.html.parameter');

/**
 * Obiekt class.  
 *
 * @package 	Joomla
 * @subpackage	zamowienie
 * @since	1.0
 */
class msZamowienie extends JObject
{
	/**
	 * Numer identyfikujący grupę
	 * @var int
	 */
	var $gid			= null;
	
	/**
	 * Error message
	 * @var string
	 */
	var $_errorMsg			= null;


	/**
	* Constructor
	* @param 	int 	$identifier 	Numer identyfikujący grupę do zaladowania
	* @access 	protected
	*/
	function __construct($identifier = 0)
	{
		// Load if it exists
		if (!empty($identifier)) {
			// Uataw identyfikator grupy
			$this->gid = $identifier;
			// Załaduj obiekt danymi z BD
			$this->load();
		} else {
			//initialise
			$this->gid        = 0;
		}
	}

	/**
	 * Returns a reference to the global Model object, only creating it if it
	 * doesn't already exist.
	 *
	 * This method must be invoked as:
	 * 		<pre>  $zamowienie =& msZamowienie::getInstance($gid); </pre>
	 *
	 * @access 	public
	 * @param 	int 	$gid 	Numer identyfikujący grupę do zaladowania
	 * @return 	mszamowienie  	The Producent object.
	 * @since 	1.0
	 */
	function &getInstance($gid = 0)
	{
		static $instances = array ();
		
		if (empty($instances[$gid])) {
			//
			$ob = new mszamowienie($gid);   // Przy przeniesieniu kodu zmieniamy tylko tą klasę np. msPojazdy($gid);
			$instances[$gid] = $ob;
		}

		return $instances[$gid];
	}

	/**
	 * Method to get the table object
	 *
	 * @access 	public
	 * @param	string	$name  Nazwa klasy tablicy
	 * @param	string	$prefix Prefix klasy tablicy
	 * @return	object	The table object
	 * @since	1.5
	 */
	function &getTable( $name = null, $prefix = 'msTable' )
	{
		// Create the table object 
		$table 	=& JTable::getInstance( $name, $prefix );
		return $table;
	}

	/**
	 * Method to bind an associative array of data to a object
	 *
	 * @access 	public
	 * @param 	array 	$array 	The associative array to bind to the object
	 * @return 	boolean 	True on success
	 * @since 1.5
	 */
	function bind(& $array)
	{
		// Bind the array
		if (!$this->setProperties($array)) {
			$this->setError("Nie można zbindować tablicy 'POST' na obiekt.");
			return false;
		}

		// Make sure its an integer
		$this->gid = (int) $this->gid;

		return true;
	}
	
	/**
	 * Method ustawia nowy numer identyfikujący grupę obiektów
	 * lub zwraca biężący.
	 *
	 * @access 	public
	 * @param	string	$nameTab  Nazwa tabeli na której wyliczamy nowy $gid
	 * @return 	int 	Nowy lub biezący numer identyfikujący grupę
	 * @since 1.0
	 */
	function setGid($nameTab)
	{	
		static $gid;
		if (isset($gid)) {
			return $gid;
		}
		
		// Tylko raz zostanie wykonany ten kod dla pierwszej tablicy
		if (empty($this->gid)) {
			// Nadanie nowego numeru identyfikującego grupę		
			$query = 'SELECT max(gid) 
		          	   FROM '.$nameTab  
		          	   ;
		        $db =& JFactory::getDBO();         
		        $db->setQuery( $query );
		        $gid = (int) $db->loadResult() + 1;
		} else {
			// Bieżący numer grupy
			$gid = (int) $this->gid;
		}
		        
		return $gid;
	}

	/**
	 * Metoda zapisuje rekordy do poszczególnych tabel BD.
	 *
	 * @access 	public
	 * @return 	boolean	true on success
	 * @since 1.0
	 */
	function save( )
	{
		// Zapisanie rekordu do tablicy "jos_zamowienia"
		if (!$this->saveTable('zamowienia')) {
			return false;
		}			
		return true;
	}
	
	/**
  	 * Metoda zapisuje jeden nowy rekord do jednej tablicy BD.   					
	 *
	 * @access 	public
	 * @param	string	$name Nazwa klasy tabeli uzytkownika 
	 * @param	string	$prefix Prefiks klasy tabeli uzytkownika
	 * @return 	boolean True on success
	 * @since 1.5
	 */
	function saveTable( $name, $prefix = 'msTable' )
	{ 
		// Utworz obiekt tablicy
		$table =& $this->getTable($name, $prefix);
		// Pobiez z ob. usera wlasciwosci do ob. tablicy
		$table->bind($this->getProperties());	
		
		// Ustawienie identyfikatora grupy. 
		// Jeśli nowy obiekt to zostanie stworzony nowy nr $gid.	
		$table->gid = $this->setGid($table->_tbl);  
	
		/*
		 * Porownanie wlasciwosci dwoch maszyn
		 */
		$isEqualObjects = 0;   //Domyslnie obiekty sa nierowne
		// Nowy obiekt
		if ($this->gid) {
			// Porownanie wlasciwosci dwoch obiektow
			$isEqualObjects = $table->compareObjects();
			if ($isEqualObjects === -1) {
				// Blad odczytu tabeli
				return false;
			}
		}
		
		// Zapisujemy pola rejestracji tylko gdy user jest nowy 
		// lub sie zmienily jego dane.
		if ($isEqualObjects === 0) {
			// Kto rejestrowal/wyrejestrowal usera
			$me =& JFactory::getUser();
			$table->whoRegister = $me->get('name');
			unset($table->registerDate);  // Aby MySql nadał nową, aktualną date
		}
	
		// Sprawdz poprawnosc danych to store
		if (!$table->check()) {
			$this->setError($table->getError());
			return false;
		}

		// Zapisz dane z obiektu tablicy do tablicy bazy dabych
		if (!$table->store($isEqualObjects)) {
			$this->setError($table->getError());
			return false;
		}
		
		return true;
	}
	
	/*
	* wstawione z msPrzeniesienie_add.php
	
	
	/**
	 * Tablica asocjacyjna zawierająca dane przesłane z formularzy dla całej sesji 
	 * @var	Array
	 
	var	$vars	= array();
		
	/**
	 * Połaczenie do BD
	 * @var source		
	 	
	var 	$db;
	
	
	/**
	 * Konstruktor obiektu
	 * Budujac obiekt otzymujemy dostep do zmienych otrzymanych z formularzy dla całej sesji.
	 * np. $oP =& new msZamowienie( );
	 *     $tablica_dane_z_formularzy =  $oP->toArray();
	 
	function __construct( $clear=0 )
	{
		$this->db =& JFactory::getDBO();
		
		$post	  = (array) JRequest::get('post');
		$session  =& JFactory::getSession();
		$registry =& $session->get('registry');
		$registry->loadArray($post, 'zamowienie');
		$this->vars = $registry->toArray('zamowienie');
	}
	
	/**
	 *
	 * @return	Array 	Zwraca tablice asocjacyjną zawierająca 
	 *                      dane przesłane z formularzy dla całej sesji 
	 /
	function toArray()
	{
		return $this->vars;
	}

	
	/**
	 * Get a registry value
	 *
	 * @param	string	$regpath	Registry path (e.g. joomla.content.showauthor)
	 * @param	mixed	$default	Optional default value
	 * @return	mixed	Value of entry or null
	 /
	function getValue($regpath, $default=null)
	{	
		$resultat = $default;
		if (isset($this->vars[$regpath])) {
			$resultat = $this->vars[$regpath];
		}
		return $resultat;
	}
	
	/**
	 * Set a registry value
	 *
	 * @param	string	$regpath 	Registry Path (e.g. joomla.content.showauthor)
	 * @param 	mixed	$value		Value of entry
	 * @return 	mixed	Value of old value or boolean false if operation failed
	 /
	function setValue($regpath, $value)
	{
		$session =& JFactory::getSession();
		$registry =& $session->get('registry');
		$registry->setValue('zamowienie.'.$regpath, $value);
		$this->vars[$regpath] = $value;
	}	
	
	/**
	 * Pobierz spółkę zarządzajacą obiektem
	 *
	 * @param 	int	$gid	Wspólny identyfikator dla tabel "jos_obiekty", "jos_obiekty_k", "jos_obiekty_r" i "jos_obiekty_s"		
	 * @return 	string	Nazwa spółki
	 /
	function getSpolka( $gid )
	{	
		$query = 'SELECT c.spolka
			  FROM #__obiekty_s AS f, #__spolka AS c
			  WHERE f.spolka = c.id
			  AND f.gid = '.$gid
			  .' AND f.registerDate = (SELECT max(registerDate) 
		                                   FROM #__obiekty_s
		                                   WHERE gid = f.gid)';
		$this->db->setQuery( $query );
		return $this->db->loadResult();
	}
	*/
	/**
	 * Metoda usuwa rekord obiektu z BD
	 *
	 * @access 	public
	 * @return 	boolean		True on success
	 * @since 1.0
	 */
	function delete( )
	{
		// Pobieramy tablicę na której dokonamy wirtualnego usunięcia (del=1)
		$table 	=& $this->getTable('zamowienie');
		// Zbinduj wlasciwosci tego obiektu do obiektu tablicy
		$table->bind($this->getProperties());
		
		// Kto wyrejestrowal 
		$me =& JFactory::getUser();
		$table->whoRegister = $me->get('name');
		unset($table->registerDate);  // Aby MySql nadał nową, aktualną date
		
		// Wirtualne usuniecie
		$table->del = 1;
		if ( !$table->store() ) {
			$this->setError($table->getError());
			return false;
		}
		
		return true;
	}


	/**
	 * Metoda laduje rekordy z wielu tabel SQL
	 *
	 * @access 	public
	 * @since 1.5
	 */
	function load()
	{	
		// Zaladuj tebele "jos_zamowienia"
		$this->loadTable('Zamowienie');			
		// Zaladuj tebele "jos_obiekt"
		$this->loadTable('Zamowienie_status');
		
		
	}
	
	/**
	 * Metoda laduje jeden rekord z jednej tabeli SQL
	 *
	 * @access 	public
	 * @param	string	$name  Nazwa klasy tablicy
	 * @param	string	$prefix Prefix klasy tablicy
	 * @return 	boolean True on success
	 * @since 1.5
	 */
	function loadTable($name, $prefix = 'msTable')
	{	
		// Numer identyfikujący grupę
		$gid = $this->gid;
		
		// Tworzy obiekt tablicy na bazie klasy msTable...
		$table =& $this->getTable($name, $prefix);
		// Zaladuj obiekt, danymi z tabeli BD
		if (!$table->load($gid)) {
			JError::raiseWarning( 'SOME_ERROR_CODE', get_class( $this ).'::load(): Nie można załadować zamowienia klasy '.$prefix.$name.' rekordem o nr grupy: '. $gid);
			return false;
		}
		// Zbinduj obiekt danymi z obiektu tabeli msTable...
		$this->setProperties($table->getProperties());
				
		return true;
	}
}
